package stu.zhl.util;

import com.google.common.base.Preconditions;
import stu.zhl.exception.ForbidInstanceException;

import static com.google.common.base.Preconditions.*;

/**
 * @author zhanghanlin
 * @ClassName ArrayUtils
 * @date 2020/1/1 下午11:16
 * @Description 关于数组的操作工具类
 */
public final class ArrayUtils {

    private ArrayUtils() {
        throw new ForbidInstanceException("工具类禁止序列化");
    }

    /**
     * 获取数组中最小的值
     *
     * @param desc        目标数值
     * @param startOffset 开始index
     * @param endOffset   结束index
     * @return 最小值
     */
    public static int min(int[] desc, int startOffset, int endOffset) {

        checkNotNull(desc, "参数不能为null");
        checkElementIndex(startOffset, desc.length, "startOffset 越界");
        checkElementIndex(startOffset, desc.length, "endOffset 越界");
        checkState(endOffset >= startOffset, "endOffset 需要大于startOffset");

        int min = desc[startOffset];
        for (int i = startOffset + 1; i < endOffset; i++) {
            if (desc[i] < min) {
                min = desc[i];
            }
        }
        return min;
    }

    /**
     * 获取数组中最小的值
     *
     * @param desc 目标数值
     * @return
     */
    public static int min(int[] desc) {
        return min(desc, 0, desc.length);
    }

}
